package com.rc.evcharger.service;


import com.rc.evcharger.vo.charge.PowerOffReq;
import com.rc.evcharger.vo.charge.StartChargeReq;
import com.rc.evcharger.vo.charge.StopChargeReq;
import com.rc.evcharger.vo.charge.UserAccountReq;

import java.math.BigDecimal;

/**
 * 统一充电接口
 */
public interface CommandService {
    /**
     * 发送充电指令
     * @param startChargeReq
     * @return
     */
    Integer query_start_charge(StartChargeReq startChargeReq);

    /**
     * 发送结束充电
     * @param stopChargeRequest
     * @return
     */
    Integer query_stop_charge(StopChargeReq stopChargeRequest);

    /**
     * 发送读取充电记录数据
     *
     * @param begin
     * @param row
     * @return
     */
//    boolean query_equip_charge_status(Long pileId, int begin, int row);

    /**
     * 发送读取当前数据指令
     *
     * @param pileId
     * @param code
     * @return
     */
//    boolean sendCurrDataCode(Long pileId, String rtua, String gunNum, String... code);

    /**
     * APP专用
     * 发送桩的充电/停止充电指令
     *
     * @param pileId
     * @param memberId
     * @param gun
     * @param status
     * @param orderId
     * @param outorderNum
     * @param chargeType
     * @return
     */
//    String sendPowerCode(Long pileId, Long memberId, String gun, String status, String orderId, String outorderNum, String chargeType, String orderSource);
//    int sendPowerCode(Long pileId, String gunNum, String status, String chargeType, String orderNum);

    /**
     * 发送桩的充电/停止充电指令
     *
     * @param pileId
     * @param status
     */
    //String sendPowerCode(Long pileId, Long memberId, String gun, String status, String orderId, String chargeType, String orderSource);

    /**
     * 发实时写对象参数指令
     *
     * @param pileId
     * @param rtua
     * @param gunNum
     * @param code
     * @return
     */
//    boolean sendRealObjDataCode(Long pileId, String rtua, Date date, String validTime, String[] code, String[] value);

    /**
     * 发写对象指令
     *
     * @param pileId
     * @param rtua
     * @param gunNum
     * @param code
     * @return
     */
//    boolean sendObjDataCode(Long pileId, String rtua, String gunNum, String[] code, Object[] value);

    /**
     * 发送远程升级指令
     *
     * @param pileId
     * @param fileName
     * @param startType
     * @return
     */
    Integer sendRemoteUpdate(Long pileId, String fileName, String startType);

    /**
     * 校时
     * @param pileId
     * @return
     */
    int sendTimingDate(Long pileId);


    /**
     * 通过桩，枪先结算redis中存在的数据
     *
     * @param pileId
     * @param gunNum
     */
    void updateOrderBalanceByRedis(Long pileId, String gunNum);

    /**
     * 解锁指令
     * @param pileId
     * @param gunNum
     * @return
     */
    int sendUnlock(Long pileId, String gunNum);

    /**
     * 断电指令
     * @param powerOffReq
     * @return
     */
    int sendCutPowerCode(PowerOffReq powerOffReq);

    /**
     * 下发电价
     * @param pileId
     * @return
     */
    int sendUserAccount(UserAccountReq userAccountReq);


    /**
     * 充电桩动态信息查询指令
     *
     * @param
     * @return
     */
    Integer check_power(Long pileId, int second);


    /**
     * 桩充电功率限制指令
     *
     * @param
     * @return
     */
    Integer limit_power(Long pileId, BigDecimal maxPower);

}
